/*
 * @Author: humengchuan 531537052@qq.com
 * @Date: 2025-10-24 11:15:28
 * @LastEditors: humengchuan 531537052@qq.com
 * @LastEditTime: 2025-10-24 21:32:17
 * @FilePath: \work-tool\experi-api\routes\v1\register.js
 * @Description: 
 */
const express = require('express');
const { verifyCaptcha, generateCaptcha } = require('../../middlewares/svg-verify');
const router = express.Router();


/**
 * 用户注册接口 - 获取验证码
 * @route POST /api/getCaptchaCode
 */
router.get('/getCaptchaCode', async (req, res) => {
  try {
    // 1. 生成验证码
    const captcha = await generateCaptcha(req, res);
    console.log('%c [ captcha ]-22',  captcha.id)
    // res.status(200).send(captcha.svg)
    res.json({
      success: true,
      message: '验证码获取成功',
      captchaId: captcha.id,
      svg: captcha.svg
    });
  } catch (error) {
    console.error('获取验证码失败:', error);
    res.status(500).json({
      success: false,
      message: '获取验证码失败，请稍后重试'
    });
  }
})

/**
 * 用户注册接口 - 包含Redis验证码验证
 * @route POST /api/register
 * @param {Object} req - Express请求对象
 * @param {Object} res - Express响应对象
 */
router.post('/register', async (req, res) => {
  try {
    // 1. 获取请求参数
    const { username, password, email, captchaId, captchaValue } = req.body;
    
    // 2. 验证必要参数
    if (!username || !password || !email || !captchaId || !captchaValue) {
      return res.status(400).json({
        success: false,
        message: '请填写所有必要信息'
      });
    }
    
    // 3. 验证用户名格式
    if (username.length < 4 || username.length > 20) {
      return res.status(400).json({
        success: false,
        message: '用户名长度必须在4-20个字符之间'
      });
    }
    
    // 4. 验证密码强度
    if (password.length < 6) {
      return res.status(400).json({
        success: false,
        message: '密码长度不能少于6个字符'
      });
    }
    
    // 5. 验证邮箱格式
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(email)) {
      return res.status(400).json({
        success: false,
        message: '请输入有效的邮箱地址'
      });
    }
    
    // 6. 验证验证码
    console.log('验证验证码:', captchaId, captchaValue);
    const isCaptchaValid = await verifyCaptcha(captchaId, captchaValue);
    
    if (!isCaptchaValid) {
      return res.status(400).json({
        success: false,
        message: '验证码错误或已过期，请重新获取'
      });
    }
    
    // 7. 验证码验证通过后，执行注册逻辑
    // 注意：这里应该连接数据库创建用户，以下为示例代码
    console.log('验证码验证成功，开始创建用户:', username, email);
    
    // TODO: 连接数据库，创建用户（这里应该使用实际的数据库操作）
    // 例如：
    // const hashedPassword = await bcrypt.hash(password, 10);
    // const newUser = await User.create({ username, password: hashedPassword, email });
    
    // 8. 返回成功响应
    return res.json({
      success: true,
      message: '注册成功',
      data: {
        username,
        email
        // 不返回密码等敏感信息
      }
    });
  } catch (error) {
    // 9. 错误处理
    console.error('注册接口错误:', error);
    
    // 判断错误类型，返回合适的错误信息
    if (error.code === 11000) { // MongoDB重复键错误
      return res.status(400).json({
        success: false,
        message: '用户名或邮箱已被注册'
      });
    }
    
    // 其他错误返回通用错误信息
    return res.status(500).json({
      success: false,
      message: '服务器内部错误，请稍后再试'
    });
  }
});

module.exports = router;